package Freya.base;

public class Methods02 {
    /*
    Java 方法的定义相当于其它语言的函数 ， 一般情况下 ， 定义一个方法包含以下语法：
    方法包含一个方法头和一个方法体 。 下面是方法的所有部分
        修饰符 ： 可选 ， 告诉编译器如何调用该方法 。 定义了该方法的访问类型 。
        返回值类型 ： 方法可能会返回值 。 returnValueType 是方法返回值的数据类型 。 有些方法执行所需的操作 ， 但没有返回值。在这种情况下 ， returnValueType 是关键字void
        方法名 ：是方法的实际名称 。 方法名和参数表共同构成方法签名。
        参数类型 ：参数是一个占位符 。 当方法被调用时 ， 传递值给蚕食 。 这个值被称为实参或变量 。 参数列表是指参数类型 ， 顺序和参数的个数 ， 参数是可选的 ， 方法可以不包含任何参数 。
            形式参数 ：在方法被调用时勇于接受外界输入的数据 。
            实参 ： 调用方法时实际穿给方法的数据。
         方法体 ： 方法体包含具体的语句 ， 定义该方法的功能。

      修饰符 返回值类型 方法名(形式参数1 , 形式参数2....){
        ....
        方法体
        ....
      }
    */

    /*方法的调用
        调用方法 ：对象名.方法名（实参列表）
        Java 支持两种调用方式 ， 根据方法是否返回值来选择。
        当方法返回一个值的时候 ， 方法调用通常被当作一个值。
            例如：int larger = max(3,5);
         当方法返回值是 void ，方法调用一定是一条语句。
            System.out.println("Hello!");
    * */

    /*值传递 和 引用传递
    * */
    public static void main(String[] args) {
        int max = max(3,4);

    }
    public static int max(int number1,int number2){
        int result = 0;
        if(number2 == number1){
            System.out.println("number1 == number2");
            return 0;//终止方法
        }
        if(number1 >number2){
            result = number1;
        }else{
            result = number2;
        }
        return result;
    }

    //方法的重载
    /*
    重载就是在一个类中 ， 有相同的函数名称 ， 但形参不同的函数
    方法重载的规则：
        方法名称必须相同
        参数列表必须不同（个数不同 、或类型不同 、 参数排列顺序不同等）
        方法的返回类型可以相同也可以不同
        仅仅返回类型不同不足以成为方法的重载
     实现理论：
        方法名称相同时 ， 编译器会根据调用方法的参数个数 、 参数类型等区逐个匹配 ， 以选择对应的方法，如果匹配失败则编译器报错
    * */
    public static double max(double number1,double number2){
        double result = 0;
        if(number2 == number1){
            System.out.println("number1 == number2");
            return 0;//终止方法
        }
        if(number1 >number2){
            result = number1;
        }else{
            result = number2;
        }
        return result;
    }
}
